package fachada;

import excecoes.ObjetoInexistenteException;
import excecoes.ObjetoInvalidoException;
import excecoes.ObjetoJaExistenteException;
import excecoes.RepositorioException;
import excecoes.SituacaoException;
import fachada.state.Situacao;
import guiasaude.Especialidade;
import guiasaude.UnidadeSaude;
import guiasaude.reps.IRepositorioEspecialidade;
import guiasaude.reps.IRepositorioUnidadeSaude;
import queixa.Queixa;

public interface IFachada {

	public abstract Queixa consultarQueixa(int codigo)
			throws RepositorioException, ObjetoInexistenteException;

	public abstract void fecharQueixa(Queixa queixa, String coment)
			throws RepositorioException, ObjetoInexistenteException,
			ObjetoInvalidoException, SituacaoException;

	public abstract int abrirQueixa(Queixa queixa) throws RepositorioException,
			ObjetoInvalidoException, SituacaoException;

	public abstract IRepositorioEspecialidade consultaEspecialidadeporUnidadeSaude(
			int codigoUnidadeSaude) throws ObjetoInexistenteException,
			RepositorioException;

	public abstract IRepositorioUnidadeSaude getUnidades();

	public abstract void incluirEspecialidade(Especialidade esp)
			throws RepositorioException, ObjetoJaExistenteException,
			ObjetoInvalidoException;

	public abstract void incluirUnidadeSaude(UnidadeSaude us)
			throws RepositorioException, ObjetoJaExistenteException,
			ObjetoInvalidoException;

	public abstract Especialidade consultaEspecialidade(int codigo)
			throws RepositorioException, ObjetoInexistenteException;

	public abstract UnidadeSaude consultaUnidadeSaude(int codigo)
			throws RepositorioException, ObjetoInexistenteException;

	public abstract double calcularMediaMedicoPacienteDia(UnidadeSaude unidade);

	public abstract Situacao consultaSituacaoQueixas();

}